수학적 표현식을 사용하여 속성을 정의할 수 있습니다. 표현식으로 속성이 정의되면 GUI 입력란 오른쪽의 수학식을 상징하는 아이콘 은 회색에서 파란색으로 바뀝니다. 아이콘을 클릭하거나 등호 =를 입력하면 해당 속성에 대한 표현식 편집기가 열립니다. 입력란에 아이콘 대신 ... 버튼이 표시되는 경우 속성을 마우스 오른쪽 버튼으로 클릭하고 상황에 맞는 메뉴에서 표현식...을 선택하면 표현식 편집기를 열 수 있습니다.
FreeCAD 표현식은 아래에 설명된 표준 수학 연산자, 함수 및 미리 정의된 상수를 사용하는 수학적 표현식입니다. 또한 표현식은 개체 속성을 참조할 수도 있고 조건문을 사용할 수도 있습니다. 표현식의 숫자에는 선택적으로 단위가 붙을 수 있습니다.
숫자에는 쉼표 ,
또는 소수점 .
을 사용하여 숫자와 소수점을 구분할 수 있습니다. 소수점 표시를 사용할 때에는 '반드시' 숫자가 하나 이상 뒤에 와야 합니다. 따라서 표현식 1. + 2.
와 1, + 2,
는 유효하지 않지만, 1.0 + 2.0
과 1,0 + 2,0
은 유효한 표현입니다.
연산자와 함수는 단위를 인식하며, 단위를 넣을 경우 유효한 단위 조합이 필요합니다. 예를 들어, 2mm + 4mm
는 유효한 표현식이지만, 2mm + 4
는 유효하지 않습니다. 이 규칙은 길이 속성과 같이 단위가 있는 개체 속성에 대한 참조에도 적용됩니다. 따라서 Pad001.Length + 1
은 길이 단위가 있는 속성에 순수한 숫자를 추가하므로 유효하지 않습니다. Pad001.Length + 1mm
처럼 단위를 붙여햐 합니다.
일부 단위 관련 오류는 직관적이지 않은 것처럼 보일 수 있으며, 표현식이 거부되거나 설정된 속성의 단위와 일치하지 않는 결과가 생성될 수 있습니다. 다음은 몇 가지 예입니다.
1/2mm
is not interpreted as half a millimeter but as 1/(2mm)
, resulting in: 0.5 mm^-1
.
sqrt(2)mm
is not valid because the function call is not a number. This has to be entered as sqrt(2) * 1mm
.
함수에 다수의 인수를 전달할 때는 세미콜론 ;
이나 쉼표 뒤에 공백 ,
으로 구분합니다.(예: sum(10;20)
또는 sum(10, 20)
) 후자의 경우, 쉼표는 입력 후 세미콜론으로 자동으로 변환되며 만일 쉼표 뒤에 공백이 없다면 이 경우 두 개의 인수가 아닌 10.2라는 하나의 인수로 인식하여 의도하지 않은 결과를 얻을 수 있습니다. 세미콜론을 사용하면 공백이 필요하지 않고 실수를 예방할 수 있습니다.
인수에는 스프레드시트의 셀에 대한 참조가 포함될 수 있습니다. 셀 참조시에는 셀의 대문자 열 뒤에 행 번호를 사용합니다(예: A1). 셀은 또한 별칭(예: Spreadsheet.MyPartWidth
)을 사용하여 참조될 수 있습니다.
위에서 이미 본 것처럼, 데이터Name으로 객체를 참조할 수 있습니다. 하지만 데이터Label을 사용할 수도 있습니다. 데이터Label의 경우 <<
와 >>
기호를 두 개 사용하여 묶어야 합니다(예: <<Label>>
).
표현식에서는 객체의 어떤 속성이든 참조할 수 있습니다. 예를 들어, Cylinder의 높이를 참조하려면 Cylinder.Height
또는 <<Label_of_cylinder>>.Height
를 사용할 수 있습니다.
객체 참조에 대한 자세한 내용은 CAD 데이터 참조를 부분을 보세요.
다음의 상수들을 표현식에 사용할 수 있습니다.
상수 | 설명 |
---|---|
e | Euler's number |
pi | Pi |
다음 연산들을 사용할 수 있습니다.
연산자자 | 설명 |
---|---|
+ | 덧셈 |
- | 뺄셈 |
* | 곱 |
/ | 부동 소수점 나눗셈 |
% | 나머지 |
^ | 지수화 |
표현식에서 다음의 수학 함수들을 사용할 수 있습니다:
삼각 함수는 기본적으로 각도의 단위로 도(度)를 사용합니다. 각도의 단위로 라디안을 사용하는 경우 표현식의 첫 번째 값 뒤에 rad
를 추가합니다. 예를 들어 cos(45)
는 cos(pi rad / 4)
와 동일합니다. 각도 표현에서는 deg
또는 °
를 사용할 수 있습니다(예: 360deg - atan2(3; 4)
또는 360° - atan2(3; 4)
). 표현식에 단위가 없고 호환성을 위해 도 또는 라디안으로 변환해야 하는 경우, 1deg
, 1°
또는 1rad
를 적절하게 곱합니다(예: (360 - X) * 1deg
; (360 - X) * 1°
; (0.5 + pi / 2) * 1rad
).
함수 | 설명 | 입력값 범위 |
---|---|---|
acos(x)
|
Arc cosine | -1 <= x <= 1 |
asin(x)
|
Arc sine | -1 <= x <= 1 |
atan(x)
|
Arc tangent, return value in the range -90° < value < 90° | all |
atan2(y; x)
|
Arc tangent of y/x accounting for quadrant, return value in the range -180° < value <= 180° | all, the invalid input x = y = 0 returns 0 |
cos(x)
|
Cosine | all |
cosh(x)
|
Hyperbolic cosine | all |
sin(x)
|
Sine | all |
sinh(x)
|
Hyperbolic sine | all |
tan(x)
|
Tangent | all, except x = n*90 with n = odd integer |
tanh(x)
|
Hyperbolic tangent | all |
hypot(x; y)
|
Pythagorean addition (hypotenuse), e.g. hypot(4; 3) = 5 | x and y >= 0 |
cath(x; y)
|
Given hypotenuse, and one side, returns other side of triangle, e.g. cath(5; 3) = 4 | x >= y >= 0 |
함수 | 설명 | 입력값 범위 |
---|---|---|
exp(x)
|
지수 함수(Exponential function) | all |
log(x)
|
자연 로그(Natural logarithm) | x > 0 |
log10(x)
|
상용 로그(Common logarithm) | x > 0 |
pow(x; y)
|
Exponentiation | all |
sqrt(x)
|
제곱근(Square root) | x >= 0 |
cbrt(x) introduced in version 0.21
|
세제곱근(Cubic root) | all |
함수 | 설명 | 입력값 범위 |
---|---|---|
abs(x)
|
절대값(Absolute value) | all |
ceil(x)
|
천정 함수(Ceiling function), x보다 크거나 같은 최소 정수 값 | all |
floor(x)
|
바닥 함수(Floor function), x보다 작거나 같은 최대 정수 값 | all |
mod(x; y)
|
x를 y로 나눈 나머지, 결과의 부호는 피제수의 부호와 같습니다. | all, except y = 0 |
round(x)
|
가장 가까운 정수로 반올림 | all |
trunc(x)
|
0 방향의 가장 가까운 정수로 잘라내기 | all |
집계 함수는 하나 이상의 인수를 취합니다.
집계 함수의 개별 인수는 셀 범위로 구성될 수 있습니다. 셀 범위는 콜론 :
으로 구분된 두 개의 셀 참조로 표현됩니다(예: average(B1:B8)
또는 sum(A1:A4; B1:B4)
). 셀 참조는 셀 별칭(예: average(StartTemp:EndTemp)
)을 사용할 수도 있습니다.
다음과 같은 집계 함수를 사용할 수 있습니다.
함수 | 설명 | 입력값 범위 |
---|---|---|
average(a; b; c; ...)
|
인수의 산술 평균값으로 , sum(a; b; c; ...) / count(a; b; c; ...)와 동일합니다. | all |
count(a; b; c; ...)
|
일반적으로 셀 범위에 사용되는 인수의 개수(Count) | all |
max(a; b; c; ...)
|
인수의 최대(Maximum)값 | all |
min(a; b; c; ...)
|
인수의 최소(Minimum)값 | all |
stddev(a; b; c; ...)
|
Standard deviation of the values of the arguments | all |
sum(a; b; c; ...)
|
인수 값의 합계(Sum)는 일반적으로 셀 범위에 사용됩니다. | all |
표현식에서 문자열은 문자열을 여는/닫는 겹화살 괄호로 둘러싸서 식별합니다.
다음 예에서 "TEXT"는 문자열로 인식됩니다: <<TEXT>>
문자열은 '+' 기호를 사용하여 연결할 수 있습니다.
다음 예제 <<MY>> + <<TEXT>>
는 "MYTEXT"로 연결됩니다.
숫자 값은 str
함수를 사용하여 문자열로 변환할 수 있습니다.
str(Box.Length.Value)
문자열 서식은 (오래된) % 형식의 파이썬 방식을 사용하여 지원됩니다.
모든 %-지정자는 파이썬 문서에 정의된 대로입니다.
예를 들어, 'Box'라는 이름(기본 FreeCAD 명명)의 기본 한 변의 길이가10mm인 정육면체가 있다고 가정하면, 다음 표현식 <<정육면체 길이 : %s>> % Box.Length
는 "정육면체 길이 : 10.0 mm"로 치환 됩니다.
% 지정자가 두 개 이상인 경우 다음 구문을 사용하세요: <<큐브 길이는 %s이고 너비는 %s입니다>> % tuple(Box.Length; Box.Width)
. 또는 연결을 사용하세요: <<큐브 길이는 %s입니다>> % Box.Length + << 너비는 %s입니다>> % Box.Width
. 둘 다 "큐브의 길이는 10.0mm이고 너비는 10.0mm입니다"로 치환 됩니다.
문자열 서식을 사용하는 FreeCAD 예제는 포럼에서 볼 수 있습니다.
The following objects may be created in expressions using the following functions:
Type | Function | Description |
---|---|---|
Tuple
|
tuple(a; b; ...)
|
Example: tuple(2; 1; 2)
|
List
|
list(a; b; ...)
|
Example: list(2; 1; 2)
|
Vector
|
vector(x; y; z)
|
Create a vector using three unit-less or Length unit values.
Example: |
create(<<vector>>; x; y; z)
| ||
Matrix
|
matrix( a11; a12; a13; a14; a21; a22; a23; a24; a31; a32; a33; a34; a41; a42; a43; a44 ) |
Create a 4x4 matrix in row-major order:
A minimum of 1 argument can be supplied such as Example: |
create(<<matrix>>; a11; a12; ...; a44)
| ||
Rotation
|
rotation(axis; angle)
|
Create a Rotation by specifying its axis (Vector ) and angle (Angle unit or unit-less), or three Euler angles α , β , γ .
Examples:
|
rotation(α; β; γ)
| ||
create(<<rotation>>; axis; angle)
| ||
create(<<rotation>>; α; β; γ)
| ||
Placement
|
placement(base; rotation)
|
Create a Placement with various parameters, including:
Examples:
|
placement(base; rotation; center)
| ||
placement(base; axis; angle)
| ||
placement(matrix)
| ||
create(<<placement>>; ...)
|
함수: introduced in version 1.0.
함수 / 연산자 | 설명 |
---|---|
v1 + v2
|
두 향량의 덧셈. |
v1 - v2
|
두 향량의 뺄셈. |
v * s
|
향량을 균일하게 s 배율 곱.
|
vangle(v1; v2)
|
두 향량 사이의 각도 |
vcross(v1; v2)
|
Cross product of two vectors . |
v1 * v2
|
Dot product of two vectors . |
vdot(v1; v2)
| |
vlinedist(v1; v2; v3)
|
Distance between vector v1 and a line through v2 in direction v3 .
|
vlinesegdist(v1; v2; v3)
|
Distance between vector v1 and the closest point on a line segment from v2 to v3 .
|
vlineproj(v1; v2; v3)
|
Project vector v1 on a line through v2 in direction v3 .
|
vnormalize(v)
|
Normalize a vector to a unit vector. |
vplanedist(v1)
|
Distance between vector v1 and a plane defined by a point v2 and a normal v3 .
|
vplaneproj(v1)
|
Project vector v1 on a plane defined by a point v2 and a normal v3 .
|
vscale(v; sx; sy; sz)
|
Non-uniformly scale a vector by sx in the X direction, sy in the Y direction, and sz in the Z direction.
|
vscalex(v; sx)
| |
vscaley(v; sy)
| |
vscalez(v; sz)
|
Rotation
and Placement
can each be represented by a Matrix
. The following functions all take in a Matrix
, Rotation
, or Placement
as their first parameter denoted in the table below by m
. The type of the returned object is the same as the object supplied in the first argument except when using mtranslate
on a Rotation
, in which case a Placement
will be returned.
Function | Description |
---|---|
minvert(m)
|
Calculate the Inverse matrix. |
mrotate(m; rotation)
|
Rotate by either:
|
mrotate(m; axis; angle)
| |
mrotate(m; α; β; γ)
| |
mrotatex(m; angle)
|
Rotate around the X axis. |
mrotatey(m; angle)
|
Rotate around the Y axis. |
mrotatez(m; angle)
|
Rotate around the Z axis. |
mtranslate(m; vector)
|
Translate by a vector (Vector ) or X, Y, Z values. If a Rotation is translated, the returned object is a Placement .
|
mtranslate(m; x; y; z)
| |
mscale(m; vector)
|
Scale by a vector (Vector ) or X, Y, Z values.
|
mscale(m; x; y; z)
|
조건식은 조건 ? 참인 경우 결과 : 거짓인 경우 결과
형식입니다. 조건은 0
(false) 또는 0이 아닌 값(true)으로 평가되는 식으로 정의됩니다.
부울 속성을 조건으로 사용하려면 다음 구문을 사용해야 합니다. VarSet.MyBool == 1 ? 10 mm : 15 mm
.
다음의 관계 연산자 정의되어 있습니다.
연산자 | 설 |
---|---|
== | 양 쪽이 같다 |
!= | 같지 않다 |
> | 왼쪽이 오른쪽 보다 크다 |
< | 왼쪽이 오른쪽 보다 작다 |
>= | 왼쪽이 오른쪽 보다 크거나 같다 |
<= | 왼족이 오른쪽 보다 작거나 같다 |
단위는 표현식에서 직접 사용할 수 있습니다. FreeCAD의 구문 분석기는 단위를 앞의 값에 연결합니다. 따라서 2mm
또는 2 mm
는 유효하지만 mm
는 선행 값이 없기 때문에 유효하지 않습니다.
모든 값에는 단위가 있어야 합니다. 따라서 일반적으로 스프레드시트의 값에는 단위를 사용해야 합니다.
어떤 경우에는 단위가 없어도 작동합니다. 예를 들어, 스프레드시트 셀 B1에 숫자 1.5
만 있고 깔판(pad) 높이를 참조하는 경우입니다. 단위가 지정되지 않은 경우에 사용되는 단위 mm
를 미리 정의되었기 때문에 작동합니다. 그럼에도 불구하고 깔판 높이로 Sketch1.Constraints.Width - Spreadsheet.B1
을 사용하면 실패합니다. 그 이유는 Sketch1.Constraints.Width
에는 단위가 있지만 Spreadsheet.B1
에는 단위가 없기 때문입니다.
지수가 있는 단위는 직접 입력할 수 있습니다. 예를 들어 mm^3
은 mm³로 인식되고 m^3
은 m³로 인식됩니다.
변수 이름이 단위와 같을 경우 변수를 << >>
사이에 넣어야 단위로 인식되는 것을 방지할 수 있습니다. 예를 들어, 치수 이름이 Sketch.Constraints.A
이면 전류 단위인 암페어로 인식됩니다. 따라서 표현식에서 Sketch.Constraints.<<A>>
로 작성해야 합니다.
다음 단위들은 표현식의 구문 분석기에 의해 인식됩니다:
단위 | 설명 |
---|---|
mmol | 밀리몰(Millimole) |
mol | 몰(Mole) |
단위 | 설명 |
---|---|
° | Degree; alternative to the unit deg |
deg | Degree; alternative to the unit ° |
rad | Radian |
gon | Gradian |
S | Second of arc; alternative to the unit ″ |
″ | Second of arc; alternative to the unit S |
M | Minute of arc; alternative to the unit ′ |
′ | Minute of arc; alternative to the unit M |
단위 | 설명 |
---|---|
mA | Milliampere |
A | 암페어(Ampere) |
kA | Kiloampere |
MA | Megaampere |
단위 | 설명 |
---|---|
pF | Picofarad |
nF | Nanofarad |
uF | Microfarad; alternative to the unit µF |
µF | Microfarad; alternative to the unit uF |
mF | Millifarad |
F | 패럿(Farad); 1 F = 1 s^4·A^2/m^2/kg |
단위 | 설명 |
---|---|
C | 쿨롱(Coulomb); 1 C = 1 A*s |
단위 | 설명 |
---|---|
uS | Microsiemens; alternative to the unit µS |
µS | Microsiemens; alternative to the unit uS |
mS | Milli지멘스 |
S | Siemens; 1 S = 1 s^3·A^2/kg/m^2 |
kS | KiloSiemens |
MS | MegaSiemens |
단위 | 설명 |
---|---|
nH | Nanohenry |
uH | Microhenry; alternative to the unit µH |
µH | Microhenry; alternative to the unit uH |
mH | Millihenry |
H | 헨리; 1 H = 1 kg·m^2/s^2/A^2 |
단위 | 설명 |
---|---|
mV | Millivolt |
V | 볼트(Volt) |
kV | Kilovolt |
단위 | 설명 |
---|---|
Ohm | 옴(Ohm); 1 Ohm = 1 kg·m^2/s^3/A^2 |
kOhm | Kiloohm |
MOhm | Megaohm |
단위 | 설명 |
---|---|
mJ | Millijoule |
J | 줄(Joule) |
kJ | Kilojoule |
eV | Electronvolt; 1 eV = 1.602176634e-19 J |
keV | Kiloelectronvolt |
MeV | Megaelectronvolt |
kWh | Kilowatt hour; 1 kWh = 3.6e6 J |
Ws | 와트시; alternative to the unit Joule |
VAs | Volt-ampere-second; alternative to the unit Joule |
CV | Coulomb-volt; alternative to the unit Joule |
cal | 칼로리(Calorie); 1 cal = 4.184 J |
kcal | Kilocalorie |
단위 | 설명 |
---|---|
mN | Milli뉴튼(newton) |
N | Newton |
kN | Kilonewton |
MN | Meganewton |
lbf | Pound of force |
단위 | 설명 |
---|---|
nm | Nanometer |
um | Micrometer; alternative to the unit µm |
µm | Micrometer; alternative to the unit um |
mm | Millimeter |
cm | Centimeter |
dm | Deci미터(Meter) |
m | Meter |
km | Kilometer |
mil | Thousandth of an inch; alternative to the unit thou |
thou | Thousandth of an inch; alternative to the unit mil |
in | Inch; alternative to the unit " |
" | Inch; alternative to the unit in |
ft | Foot; alternative to the unit ' |
' | Foot; alternative to the unit ft |
yd | Yard |
mi | Mile |
Unit | Description |
---|---|
cd | Candela |
Unit | Description |
---|---|
Wb | Weber; 1 Wb = 1 kg*m^2/s^2/A |
Unit | Description |
---|---|
G | Gauss; 1 G = 1 e-4 T |
T | Tesla; 1 T = 1 kg/s^2/A |
단위 | 설명 |
---|---|
ug | Microgram; alternative to the unit µg |
µg | Microgram; alternative to the unit ug |
mg | 밀리그램 |
g | 그램 |
kg | 킬로그램 |
t | 톤 |
oz | Ounce |
lb | Pound; alternative to the unit lbm |
lbm | Pound; alternative to the unit lb |
st | Stone |
cwt | Hundredweight |
단위 | 설명 |
---|---|
W | 와트(Watt) |
kW | 킬로와트 |
단위 | 설명 |
---|---|
Pa | 파스칼 |
kPa | Kilopascal |
MPa | Megapascal |
GPa | Gigapascal |
uTorr | Microtorr; alternative to the unit µTorr |
µTorr | Microtorr; alternative to the unit uTorr |
mTorr | Millitorr |
Torr | Torr; 1 Torr = 133.32 Pa |
psi | Pound-force per square inch; 1 psi = 6.895 kPa |
ksi | Kilopound-force per square inch |
단위 | 설명 |
---|---|
uK | Microkelvin; alternative to the unit µK |
µK | Microkelvin; alternative to the unit uK |
mK | Millikelvin |
K | 켈빈 |
단위 | 설명 |
---|---|
s | 초 |
min | 분 |
h | 시간 |
Hz (1/s) | 헤르츠 |
kHz | Kilohertz, |
MHz | Megahertz |
GHz | Gigahertz |
THz | Terahertz |
단위 | 설명 |
---|---|
ml | Milliliter |
l | 리터 |
cft | Cubicfoot |
Unit | Description |
---|---|
mph | Miles per hour |
sqft | Square foot |
다음과 같은 일반적으로 사용되는 단위는 아직 지원되지 않으며, 일부 단위에는 대체 단위가 제공됩니다.
단위 | 설명 | 대체 |
---|---|---|
°C | Celsius | [°C] + 273.15 K |
°F | Fahrenheit; | ([°F] + 459.67) × 5/9 |
u | Atomic mass unit; alternative to the unit Da | 1.66053906660e-27 kg |
Da | Dalton; alternative to the unit u | 1.66053906660e-27 kg |
sr | Steradian | not directly |
lm | Lumen | not directly |
lx | Lux | not directly |
px | Pixel | not directly |
표현식은 매우 강력하지만,일부 문자 사용에 제약이 있습니다. 이를 극복하기 위해 FreeCAD는 개체 이름 대신 표지(Label)을 사용하고 참조하도록 제안합니다. 표지에서는 거의 모든 특수 문자를 사용할 수 있습니다.
스케치의 구속 이름과 같은 표지(lable)를 사용할 수 없는 경우 어떤 문자가 허용되지 않는지 알고 있어야 합니다.
표지에는 사용할 수 없는 문자는 없지만 일부 문자는 이스케이프해야 합니다:
문자 | 설명 |
---|---|
' , \ , "
|
\ 를 앞에 추가하여 이스케이프해야 합니다.
|
예를 들어, 표지 Sketch\002
는 <<Sketch\\002>>
로 참조되어야 합니다.
치수, 스케치 등의 객체의 이름에는 아래에 나열된 문자나 문자열이 없어야 합니다. 그렇지 않은 이름은 유효하지 않습니다.
문자 / 문자열 | Description |
---|---|
+, -, *, /, ^, _, <, >, (, ), {, }, [, ], ., ,, = | 수학 연산자 또는 수학 구성의 일부인 문자 |
A, kA, mA, MA, J, K, ' , ft , °, 기타 등등! | 단위인 문자 및 문자 시퀀스(단위 문단 참조) |
#, !, ?, §, $, %, &, :, ;, \, |, ~, ∆, ¿, 기타 등등! | 자리 표시자로 사용하거나 특수 작업을 유발하는 데 사용되는 문자 |
pi, e | 수학 상수 |
´, `, ' , " | 강조에 사용되는 문자 |
공백 | 공백은 이름의 끝을 정의하므로 사용할 수 없습니다. |
예를 들어, 다음 이름은 유효합니다: <<Sketch>>.Constraints.T2üßµ@
. 그러나 다음의 이름은 유효하지 않은 이름입니다: <<Sketch>>.Constraints.test\result_2
(\r은 "캐리지 리턴"을 의미함) 또는 <<Sketch>>.Constraints.mol
(mol은 단위임).
짧은 이름(특히 문자가 하나 또는 두 개뿐인 경우)은 쉽게 잘못된 이름을 생성할 수 있으므로 더 긴 이름을 사용하거나 적절한 명명 규칙을 수립하는 것을 고려하세요.
스프레드시트 SetAlias를 참조하세요.
모형 자체의 데이터를 표현식에서 사용하는 것이 가능합니다. 속성을 참조하려면 object_name.property
또는 <<object_label>>.property
를 사용하고, 표지는 <<
및 >>
로 묶어야 합니다. 표지를 사용하려면 고유해야 합니다
다음 모든 예에서는 객체를 이름으로 참조하지만, 어떤 경우에도 객체 표지를 사용할 수 있습니다.
속성이 필드의 합성인 경우 개별 필드는 object_name.property.field
로 액세스할 수 있습니다.
목록 객체를 참조하려면 object_name.list[list_index]
를 사용합니다. 스케치에서 구속(Constraint)을 참조하려면 Sketch.Constraints[16]
를 사용합니다.
객체 자체를 참조하려면 _self
가상 속성인 object_name._self
를 사용합니다.
다음 표에서는 몇 가지 예를 더 보여줍니다:
CAD 데이터 | 표현식에서 호출 | 결과 |
---|---|---|
상자의 길이 | Box.Length
|
길이 (단위: mm) |
상자의 부피 | Box.Shape.Volume
|
mm³ 단위의 부피 |
Shape type of the Box | Box.Shape.ShapeType
|
String: Solid |
Label of the Box | Box.Label
|
String: Label |
X-coordinate of center of mass of the Box | Box.Shape.CenterOfMass.x
|
X-coordinate in mm without units |
X-coordinate of the Box placement | Box.Placement.Base.x
|
X-coordinate with units (mm) |
X-component of the rotation axis of the Box placement | Box.Placement.Rotation.Axis.x
|
X-component of the unit vector in mm without units |
Rotation angle of the Box placement | Box.Placement.Rotation.Angle
|
Rotation angle with units (deg) |
Full Box object | Box._self
|
Object of type <Part::PartFeature> |
Value of constraint in a sketch | Constraints.Width
|
Numeric value of the named constraint Width in the sketch, if the expression is used in the sketch itself.
|
Value of constraint in a sketch | MySketch.Constraints.Width
|
Numeric value of the named constraint Width in the sketch, if the expression is used outside of the sketch.
|
Value of a spreadsheet alias | Spreadsheet.Depth
|
Value of the alias Depth in the spreadsheet Spreadsheet
|
Value of a local property | Length
|
Value of the 데이터Length property in e.g a Pad object, if the expression is used in e.g 데이터Length2 in the same object. |
FreeCAD는 속성이 아닌 문서 객체 간의 관계에 따라 종속성을 확인합니다. 즉, 객체에 데이터를 제공한다면 동일한 객체에 대한 결과를 조회할 수는 없습니다. 예를 들어 속성 자체를 고려할 때 순환 종속성이 없더라도 스프레드시트에서 치수를 가져온 다음 동일한 스프레드시트에 해당 개체의 볼륨을 표시하는 개체가 없을 수 있습니다. 하나는 모델을 구동하는 데, 다른 하나는 보고용으로 두 개의 스프레드시트를 사용해야 합니다.
해결 방법으로, 바인딩 종속성 숨기기 옵션과 함께 셀 바인딩을 만들어 두 번째 스프레드시트의 셀 범위를 첫 번째 스프레드시트에 표시하거나 그 반대로 표시할 수 있습니다.
순환 종속성을 해결하는 또 다른 방법은 개별 표현식에 대해 href
또는 hiddenref
함수를 사용하여 참조를 숨기는 것입니다(예: href(Box.Length)
).
언급된 두 가지 해결 방법은 주의해서 사용해야 하며, 보고된 속성이 동일한 스프레드시트에서 구동되는 차원에 따라 달라지는 경우 작동하지 않습니다.
현재 FreeCAD에는 전역 변수라는 개념이 없습니다. 대신, 임의의 변수는 스프레드시트 작업대를 사용하여 스프레드시트의 셀로 정의될 수 있으며, 셀의 별명 속성을 사용하여 이름을 지정할 수 있습니다(셀을 마우스 오른쪽 버튼으로 클릭). 그러면 다른 객체 속성과 마찬가지로 모든 표현식에서 접근할 수 있습니다.
다른 문서(.FCstd 파일)에 포함된 개체의 속성을 참조하는 표현식을 사용하여 현재 문서(.FCstd 파일)에 있는 개체의 속성을 정의하는 것은 (제한이 있긴 하지만) 가능합니다. 예를 들어, 스프레드시트의 셀이나 입방체의 데이터길이 등입니다. 한 문서에서는 다른 문서에 포함된 객체의 X 배치 값이나 다른 속성을 참조하는 표현식으로 정의할 수 있습니다.
문서의 이름은 다른 문서에서 참조하는 데 사용됩니다. 문서를 처음 저장할 때 파일 이름을 선택합니다; 이는 일반적으로 초기 기본 "Unnamed1"(또는 번역된 동등 값)과 다릅니다. 마스터 문서의 이름을 변경하여 저장할 때 링크가 손실되는 것을 방지하려면 먼저 마스터 문서를 만들고, 그 안에 스프레드시트를 만든 다음 저장하는 것이 좋습니다. 이후에도 해당 파일과 스프레드시트를 변경할 수는 있지만 이름을 바꾸면 안 됩니다.
스프레드시트가 포함된 마스터 문서가 만들어지고 저장(이름 지정)되면 종속 문서를 안전하게 만들 수 있습니다. 예를 들어 마스터 문서의 이름을 master
로, 스프레드시트의 이름을 모형modelConstants
로, 셀의 별명을 Lenth
로 지정했다면 다음과 같이 값에 접근할 수 있습니다:
master#modelConstants.Length
마스터의 값을 종속 문서에서 사용할 수 있으려면 마스터 문서를 먼저 로드해야 합니다.
물론, 나중에 무엇인가를 변경하고 싶을 때 해당 문서를 로드하는 것은 여러분의 몫입니다.
import FreeCAD as App
doc = App.ActiveDocument
box = doc.addObject("Part::Box", "Box")
cyl = doc.addObject("Part::Cylinder", "Cylinder")
cyl_name = cyl.Name
box.setExpression("Height", f"{cyl_name}.Height / 2")
box.setExpression("Length", f"{cyl_name}.Radius * 2")
box.setExpression("Width", "Length")
doc.recompute()
# Expressions are stored in the ExpressionEngine property:
for prop, exp in box.ExpressionEngine:
val = getattr(box, prop)
print(f"Property: '{prop}' -- Expression: '{exp}' -- Current value: {val}")